package cn.kawa.user.controller;

import cn.kawa.basic.util.JsonResult;
import cn.kawa.basic.util.PageList;

import cn.kawa.user.domain.LoginInfo;
import cn.kawa.user.query.LoginInfoQuery;
import cn.kawa.user.service.ILoginInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

//@Controller  //@responseBody
@RestController //扫描此controller，返回json数据
@RequestMapping("/loginInfo")
@Api(value = "员工的API",description="员工相关的CRUD功能")
public class LoginInfoController {

    @Autowired
    private ILoginInfoService loginInfoService;

    /** GetMapping
     * 动词 GET
     * @return 查询所有
     */
    //@RequestMapping(value = "",method = RequestMethod.GET)
    @GetMapping()//等同于以上，
    @ApiOperation(value = "查询所有" )
    public List<LoginInfo> findAll(){
        //System.out.println(loginInfoService.findAll());
        return loginInfoService.findAll();

    }


    /** DeleteMapping PathVariable
     * @return 查询一个
     * @param id
     */
    @GetMapping("/{id}")
    //@PathVariable("{id}" : 从路径中获取id属性
    @ApiOperation(value = "通过ID查询" )
    public LoginInfo findById(@PathVariable("id") Long id){
        return  loginInfoService.findById(id);
    }

    @DeleteMapping("/{id}")
    @ApiOperation(value = "通过ID删除一条" )
    public JsonResult delete(@PathVariable("id") Long id){
        try {//成功时返回默认JsonResult对象，失败返回调用setMsg方法后的对象
            /*System.out.println(id);
            System.out.println("|||||||||fengexian");*/
            loginInfoService.delete(id);
            return JsonResult.me();//
        } catch (Exception e) {
            e.printStackTrace();
            return JsonResult.me().setMsg("操作失败");//
        }

    }

    @PatchMapping
    @ApiOperation(value = "通过传入id数组批量删除" )
    public JsonResult patchDel(@RequestBody List<Long> ids){
        try {//成功时返回默认JsonResult对象，失败返回调用setMsg方法后的对象
            //System.out.println(ids);
            loginInfoService.patchDel(ids);
            return JsonResult.me();//
        } catch (Exception e) {
            e.printStackTrace();
            return JsonResult.me().setMsg("操作失败");//
        }

    }



    /**PutMapping RequestBody
     *
     * @param loginInfo
     * @return  判断id是否有值，进行添加或修改操作，返回成功或失败
     */
    @PutMapping()//此处路径里不需要信息，信息再请求体
    //@RequestBody ： 获取请求体的信息
    @ApiOperation(value = "根据id是否有值，添加或修改" )
    public JsonResult save(@RequestBody LoginInfo loginInfo){
        try {
            if(loginInfo.getId()==null){
                loginInfoService.add(loginInfo);
            }else {
                loginInfoService.update(loginInfo);
            }
            return JsonResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return JsonResult.me().setMsg("操作失败");
        }
    }

    /**PostMapping RequestBody
     *
     * @param query
     * @return 根据页面请求体参数来查询分页
     */
    @PostMapping()
    @ApiOperation(value = "通过currentPage 和pageSize 分页查询" )
    public PageList<LoginInfo> queryPage(@RequestBody LoginInfoQuery query){
        try {//此处try的作用和上面不同，是为了使错误信息不显示在页面
            //loginInfoService.queryPage(query).getData().forEach(System.out::println);
            return loginInfoService.queryPage(query);

        } catch (Exception e) {
            e.printStackTrace();
            return new PageList<>();
        }
    }



}
